/**
 * @created by liujie on 2018-09-04
 * @updated by
 * @description 首页&框架公共管理
 */
(function (yufp, window, factory) {
  var exports = factory(yufp, window, window.document);
  if (typeof define === 'function') {
    define(exports);
  }
  window.yufp.frame = exports;
}(yufp, window, function (yufp, window, document) {
  var lang = window.comLang || {};
  /**
   * 框架管理（页签、公共设置）
   * @constructor
   */
  function Frame () {
    var _options = {
      menuUrl: backend.appOcaService + '/api/account/menuandcontr',
      // 基础页签属性
      baseTabOptions: {
        // 页签位置显示，支持 top 和 bottom
        position: 'top',
        // 页签展示方式, part：首页/非首页分组，multi：默认分组，single：单页模式
        model: 'multi',
        // tab页签打开数量默认10, 0 为不限制
        maxOpenTabs: 10,
        // 是否开启页签右键刷新功能
        rightClickRefresh: true,
        // 重复打开是否刷新
        openDuplicateRefresh: false,
        // 双击页签刷新页面
        doubleClickRefresh: true,
        // 单页签模式时是否显示面包屑
        breadCrumb: true
      },
      // 基础菜单属性
      baseMenuOptions: {
        // 是否能展开多个子菜单
        unique: true,
        // 是否默认展开所有子菜单，true：默认展开，false：默认收缩
        defaultOpen: false,
        // 菜单左右时，是否显示非一级菜单图标
        showMenuIcon: false
      },
      // 基础框架属性
      baseFrameOptions: {
        moreSystem: false, // 是否配置多系统 #TODO 配置是否显示多系统
        dashboardRID: 'f63f59f575e64bcda74c175bea4e2783', // dashboard页面对应的路由ID，此处仅用于在切换皮肤时dashboard中曲线图颜色变化
        // 默认用户信息
        defaultUserInfo: {
          name: 'YUFP',
          roles: [
            { id: 'modelAdmin', code: 'modelAdmin', name: '模型管理员' },
            { id: 'cstManager', code: 'cstManager', name: '客户经理' }
          ],
          picUrl: 'themes/common/images/user_default_pic.png'
        },
        // 主题下的菜单，只可以修改是否可见(show)和文本（text）
        themeTool: [
          { show: true, text: lang.skin, id: 'skin' },
          { show: true, text: lang.layout, id: 'model' },
          { show: true, text: lang.model, id: 'sizeModel', extend: true} // extend标注是否显示自动滑块
          // { show: true, text: '字号', id: 'font' }
        ],
        // 皮肤
        themesList: [
          // 默认是紫色,皮肤id需要和主题中皮肤目录相同对应
          { id: 'blue', color: '#2877FF', name: '蓝色（默认）' },
          { id: 'orange', color: '#FB8D12', name: '橙色' },
          { id: 'purple', color: '#5557b9', name: '紫色' }
        ],
        // 字号
        fontSizeList: [
          { id: 'small', name: '较小' },
          { id: 'normal', name: '正常', checked: true },
          { id: 'large', name: '较大' }
        ],
        // 菜单模式(left/right/topTree/topTile)
        modelList: [
          { id: 'left', name: '左右(左)', checked: true },
          { id: 'right', name: '左右(右)' },
          // { id: 'topTile', name: '上下(平铺菜单)' },
          { id: 'topTree', name: '上下(树形菜单)' }
        ],
        // 语言
        languageList: [
          { id: 'zh', name: lang.lang_z, checked: true },
          { id: 'en', name: lang.lang_e }
        ],
        searchPlaceholder: lang.gjz,
        messageTitle: {
          all: lang.all,
          todo: lang.todo,
          xx: lang.message
        },
        logoTitle: lang.ptglxt,
        // 搜索的类型
        searchType: [
          { id: 'cst', name: lang.cst, checked: true },
          { id: 'bus', name: lang.bus },
          { id: 'cpy', name: lang.cpy }
        ],
        // 紧凑模式
        sizeModel: [
          {id: 'normal', name: '正常', checked: true},
          {id: 'compact', name: '紧凑'}
        ],
        // 应用切换列表
        appOptions: [
          { applicationId: '1', applicationName: 'PC内管应用演示', checked: true},
          { applicationId: '2', applicationName: '商城应用'},
          { applicationId: '3', applicationName: '资讯应用' }
        ],
        // #TODO 语言翻译
        messageBtn: {
          handle: lang.handle, // 处理
          checkInfo: lang.checkInfo, // 查看
          cleanAll: lang.cleanAll, // 清空全部
          checkMore: lang.checkMore, // 查看更多
          currentSystem: lang.currentSystem, // 当前应用
          rightArrow: lang.rightArrow, // 向前
          leftArrow: lang.leftArrow, // 向后
          unfold: lang.unfold, // 展开
          menuShow1: lang.menuShow1, // 收起
          menuShow2: lang.menuShow2, // 展开
          auto: lang.auto, // 自动
          yes: lang.yes, // 是
          no: lang.no, // 否
          personalData: lang.personalData, // 个人资料
          changePassword: lang.changePassword, // 修改密码
          logout: lang.logout // 注销登录
        },
        // 直接显示搜索框
        showSearchInput: false,
        // 是否后台存储配置信息(菜单模式，字号，皮肤)
        saveInfo: {
          saveConfig: false,
          // 保存配置信息的请求路径
          saveConfigUrl: backend.adminService + '/api/userframeconfig/save',
          // 查询配置信息的请求路径
          queryConfigUrl: backend.adminService + '/api/userframeconfig/query',
          // 用户返回数据节点默认为返回的response,如：'data'
          jsonRoot: '',
          // 查询或保存时传入的附加参数如用户名
          baseParams: { userId: yufp.session.userId },
          // 保存字段的映射关系
          configMapping: {
            // 菜单模式
            menuModel: 'menuModel',
            // 字号
            fontSize: 'fontSize',
            // 皮肤
            themes: 'themes'
          }
        },
        // 可以添加类似主题的工具项， 每个工具支持event属性，包括click(event)，mouseenter(event)，mouseout(event)事件
        sysTools: [
          // { show: true,
          //   text: '查询',
          //   icon: 'yu-icon-search1',
          //   className: 'yu-frame-search-icon',
          //   id: 'search',
          //   event: { click: function ($event) {
          //     yufp.frame.searchToogle($event);
          //   } } },
          // { show: true, text: '消息', icon: 'yu-icon-message', className: '', id: 'message', badgeDot: true },
          // { show: true, text: '积分', icon: 'yu-icon-message', className: '', id: 'integral', badgeDot: false },
          // { show: true, text: '主题', icon: 'yu-icon-theme', className: '', id: 'themes' },
          // { show: true, text: '语言', icon: 'yu-icon-network', className: '', id: 'language' },
          // { show: true,
          //   text: '全屏',
          //   icon: 'yu-icon-full-screen',
          //   className: '',
          //   id: 'fullscreen',
          //   event: {
          //     click: function (event) {
          //       if (!window.screenfull.isEnabled) {
          //         yufp.util.globalVm.$message({
          //           message: '浏览器不支持全屏',
          //           type: 'warning'
          //         });
          //         return false;
          //       }
          //       var className = event.target.getAttribute('class');
          //       event.target.setAttribute('class', window.screenfull.isFullscreen ? className.replace('-unfull-', '-full-') : className.replace('-full-', '-unfull-'));
          //       window.screenfull.toggle();
          //     }
          //   } },
          // { show: true,
          //   text: '收起',
          //   icon: 'yu-icon-arr-up',
          //   className: '',
          //   id: 'pickup',
          //   event: { click: function (item, _this) {
          //     // 隐藏工具栏
          //     var toolbar = document.getElementsByClassName('yu-frame-top-bar')[0];
          //     toolbar.setAttribute('class', 'yu-frame-top-bar yu-frame-top-bar-pickup');
          //     if (_this.menuModel.id === 'left' || _this.menuModel.id === 'right') {
          //       // yu-frame-tabs增加class 用于控制hover
          //       var tabs = document.getElementsByClassName('yu-frame-tabs')[0];
          //       tabs.setAttribute('class', 'yu-frame-tabs yu-frame-tabs-div');
          //       // 设tab高度，以调整内容区域高度
          //       var tab = document.getElementsByClassName('yu-frame-tab')[0];
          //       tab.setAttribute('class', 'yu-frame-tab yu-frame-tab-unfold');
          //     } else if (_this.menuModel.id === 'topTile' || _this.menuModel.id === 'topTree') {
          //       // 设置菜单高度样式
          //       var frameMenu = document.getElementsByClassName('yu-frame-menu')[0];
          //       frameMenu.setAttribute('class', 'yu-frame-menu yu-frame-menu-pickup');
          //       var tabTop = document.getElementsByClassName('yu-frame-tab')[0];
          //       tabTop.setAttribute('class', 'yu-frame-tab yu-frame-tab-unfold');
          //     }
          //     // 触发pickup事件处理页面吸顶操作
          //     yufp.util.globalVm.$emit('pickup', true);
          //   } } },
          { show: true,
            text: '注销',
            icon: 'yu-icon-shutdown',
            className: '',
            id: 'logOut',
            event: { click: function () {
              yufp.frame.logOut();
            } } }
        ],
        // 例如：example/log/menu 。默认为空时不发送日志请求
        viewMenuLogUrl: '',

        userMessages: [
          { type: 0, from: lang.ll, msg: lang.msg1, dateTime: lang.dateTime1, state: lang.state },
          { type: 1, from: lang.lyz, msg: lang.msg2, dateTime: lang.dateTime2, state: 'undefined' },
          { type: 0, from: lang.ckf, msg: lang.msg3, dateTime: lang.dateTime3, state: lang.state },
          { type: 1, from: lang.lw, msg: lang.msg4, dateTime: lang.dateTime4, state: undefined },
          { type: 0, from: lang.wcy, msg: lang.msg5, dateTime: lang.dateTime5, state: lang.state }
        ]
      },
      // 首页框架对象
      baseFrame: null,
      // 菜单初始化完成前调用  返回 false 表示不执行菜单初始化，否则初始化菜单结构
      beforeInit: function () {
      },
      // 鼠标移到页签上的事件后触发
      tabMouseEnter: function (tab, event) {
      },
      // tab点击事件后触发
      tabClick: function (tab, event) {
      },
      // 角色切换 role 角色对象
      switchRole: function (role) {
        var obj = yufp.sessionStorage.get('YUFP-SESSION-USER');
        if (obj) {
          obj = JSON.parse(obj);
        } else {
          obj = undefined;
        }
        var newRoleList=[];
        var otherRoleList= [];
        for (let i=0 ;i<obj.roles.length;i++){
          if (role.code === obj.roles[i].code){
            newRoleList.push(obj.roles[i])
          }
          else {
            otherRoleList.push(obj.roles[i])
          }
        }
        for (let i=0 ;i<otherRoleList.length;i++){
            newRoleList.push(otherRoleList[i])
        }
        obj.roles = newRoleList;
        yufp.sessionStorage.put('YUFP-SESSION-USER', JSON.stringify(obj));
        yufp.session.loadMenus()
        window.location.reload();
      },
      // 搜索事件.type 搜索类型对象，value 查询的条件
      searchBarClick: function (type, value) {
      },
      // 搜索过滤返回的数据集. type 搜索类型对象， value 过滤方法返回值为包括label，value 对象的数组
      searchDataFilter: function (type, value) {
        // return [{label: '测试', value: 'test'}];
      },
      // 过滤后数据项的点击事件. type 搜索类型对象，item过滤后选中的数据项
      searchItemClick: function (type, item) {
      },
      // 菜单点击后回调
      menuItemClick: function (menuId) {

      },
      // 注销登录
      logOut: function () {
        yufp.session.logout();
      },
      // 搜索框显示切换
      searchToogle: function (event) {
        event.target.classList.add('search-show');
      }
    };
    yufp.extend(this, _options);
  };

  /**
   * 获取页面的高度和宽度
   */
  Frame.prototype.size = function () {
    return yufp.clone({}, this.baseFrame.$refs.refTab.getContentSize());
  };

  /**
   * 添加页签
   * @param options 页签参数
   * {
   *  id: routeId, // 菜单功能ID（路由ID）
   *  key: menuId, // 菜单ID
   *  title: '模板', // 页签名称
   *  data: {} // 传递的业务数据，可选配置
   *  }
   */
  Frame.prototype.addTab = function (options) {
    this.baseFrame.$refs.refTab.addTab(options);
    this.baseFrame.$refs.refMenu.activeMenuItem(options.key);
  };

  /**
   * 移除页签
   * @param menuid 菜单id
   */
  Frame.prototype.removeTab = function (menuId) {
    this.baseFrame.$refs.refTab.removeTab(menuId);
  };

  /*
   * 激活页签
   * @param menuid 菜单id
   */
  Frame.prototype.activeTab = function (menuId) {
    this.baseFrame.$refs.refTab.activeTab(menuId);
  };

  /*
   * 刷新页面
   * @param options 页签参数
   * {
   *  routerId: routeId, // 菜单功能ID（路由ID）
   *  menuId: menuId, // 菜单ID
   *  data: {} // 传递的业务数据，可选配置
   *  }
   */
  Frame.prototype.refreshTab = function (options) {
    this.baseFrame.$refs.refTab.refreshTab(options);
  };

  /**
   * 获取页签参数
   * @param menuId 菜单id,无key时，返回当前tab
   */
  Frame.prototype.getTab = function (menuId) {
    return this.baseFrame.$refs.refTab.getTab(menuId);
  };

  /**
   * 获取页签参数
   * 旧的方法，新项目不建议使用
   * @param menuId 菜单id,无key时，返回当前tab
   */
  Frame.prototype.tab = function (menuId) {
    var tabInfo = this.baseFrame.$refs.refTab.getTab(menuId);
    return {
      key: tabInfo.menuId, // 页签标识，默认为当前页签
      url: tabInfo.routeId, // 页签url(或路由id)
      title: tabInfo.title, // 页签标题,
      data: tabInfo.data
    };
  };

  /**
   * 菜单激活，高亮
   * @param menuId 菜单Id
   */
  Frame.prototype.focusMenu = function (menuId) {
    this.baseFrame.$refs.refMenu.activeMenuItem(menuId);
  };

  /**
   * 菜单单击事件
   * @param menuId  菜单id
   * @param callback  回调function
   */
  Frame.prototype.menuClick = function (menuId, callback) {
    this.baseFrame.menuItemClick(menuId);
    if (callback && yufp.type(callback) == 'function') {
      callback();
    }
  };

  /**
   * 通过菜单id获取菜单对象
   * @param menuId 菜单id
   */
  Frame.prototype.getMenuById = function (menuId) {
    return yufp.clone(this.baseFrame.$refs.refMenu.getMenuById(menuId), {});
  };

  /**
   * 获取根节点到当前节点的路径
   * @param menuItemData 当前菜单节点数据
   * @return {Array} 存储根节点到当前节点数据对象
   */
  Frame.prototype.getMenuPath = function (menuItemData) {
    return yufp.clone(this.baseFrame.$refs.refMenu.getMenuPath(menuItemData), []);
  };

  return new Frame();
}));
